import { createRouter, createWebHistory,createWebHashHistory } from 'vue-router'
import axios from 'axios';
import {navList,loadNav} from '../router/dynamicRouting.js';

import { getMenu } from "../util/getMenu.js";

// const mainRoutes = [
//   {...{path: '',name: '_login',component:  () => import('../views/login/index.vue')}},
// ]

// const subsetRoutes = [
//   {
//     path: '', name: "_dataDisplay",meta: {title: '数据展示'},
//     component: () => import('../views/main.vue'),
//     children: [
//       {path: '/home',name: "home",meta: {title: '数据展示'},component: () => import('../views/home/index.vue')},
//     ]
//   },
//
//
// ]



const router = createRouter({
  history: createWebHashHistory(import.meta.env.BASE_URL),//带#
  // history: createWebHistory(import.meta.env.BASE_URL),//不带#  打包有问题
  routes:navList
})








let getRouter;//用来获取后台拿到的路由
//路由跳转前拦截
router.beforeEach(async(to, from, next) => {

  // //todo  先做数据看板
  // next()
  // return false;

  /*
  * 1.如果是登录
  *   没有token 登录
  *   有token  首页
  * 2.如果不是登录
  *   没有token 登录
  *   有token  跳过
  *
  * */
  // todo 路由拦截 和 动态路由生成 为开发完
  const token = sessionStorage.getItem('loginData');
  /*
  * 1. 需要先判断  getRouter 执行菜单方法
  *
  *
  * */
  if(to.name == '_login'){
    if(!token){
      next() // 跳转
    }else{
      // getMenu()
      // //跳转首页
      // next({name: 'dept'}) // 跳转到登录页

      let loginData = JSON.parse(sessionStorage.getItem("loginData"));
      if(!!loginData.userInfo.strength){
        next({name:await getMenu()})
      }else{
        sessionStorage.clear();// 删除所有数据
        next({name: '_login'}) // 跳转到登录页
      }
    }
  }else{
    if (to.name == "error_401" || to.name == "error_500" || to.name == "error_404" || to.name == 'mid') {//首页 401 500 404 全部放过
      if (!getRouter) { //不加这个判断，路由会陷入死循环
        await getMenu()
        getRouter = navList; //
        next({...to, replace: true})
      } else {
        next()
      }
    } else if (!token) {
      next({name: '_login'}) // 跳转到登录页
    } else {


      let loginData = JSON.parse(sessionStorage.getItem("loginData"));
      if(!!loginData.userInfo.strength){

        if (!getRouter) { //不加这个判断，路由会陷入死循环
          let menu = await getMenu()
          getRouter = navList; //
          // next({name: menu})
          next({...to, replace: true})
        } else {
          next()
        }

      }else{
        sessionStorage.clear();// 删除所有数据
        next({name: '_login'}) // 跳转到登录页
      }
    }
  }
})

//路由跳转后拦截
router.afterEach(async (to, from) => {
  if(process.env.NODE_ENV !== "development") {
    await axios.get('version.json').then((res)=>{
      if(res.status === 200) {
        let { version } = res.data
        let cocalVersion = localStorage.getItem('version_v')
        if(!cocalVersion || version !== cocalVersion) {
          localStorage.setItem('version_v', version)
          window.location.reload()
        }
      }
    })
  }
  // LoadingBar.stop()
});



export default router
